package cap4;

public class Matriz {

	private float[][] mr;
	// Constructor
	public Matriz(int nfil,int ncol){
	  mr=new float[nfil][ncol];}
	//Consultas
	public int obtenerNfil ()    {
	  return mr.length; }
	public int obtenerNcol ()    {
	  return mr[0].length; }
	public boolean existePos(int f, int c) { 
	  return (f>=0 && f < obtenerNfil()) &&
	          (c>=0 && c < obtenerNcol());}
	public float obtenerElem(int f,int c){
	//Requiere f y c consistentes
	  return mr[f][c];}
	//Comandos
	public void establecerElemento (int f,int c, 						       float x) {
	//Requiere f y c consistentes
		mr[f][c]= x;} 
	public void establecerIdentidad () {
	//Requiere que el número de filas sea igual al de columnas
	    iniMatriz();
	    for (int j=0;j<obtenerNcol();j++)
	      mr[j][j] = 1;    }
	public void iniMatriz () {
	  for (int i=0;i<obtenerNfil();i++)    
	    for (int j=0;j<obtenerNcol();j++)
	       mr[i][j] = 0;    }
	public void xEscalar (float r) {
	//Multiplica cada elemento de la matriz por r
	 for (int i=0;i<obtenerNfil();i++) 
	   for (int j=0;j<obtenerNcol();j++)
	      mr[i][j] = mr[i][j] * r;}
	public void copy (Matriz m) {
	/*Crea un nuevo objeto para el atributo de instancia con el nro de filas y columnas de m */
	 mr = new float[m.obtenerNfil()][m.obtenerNcol()];
	 for (int i=0;i<obtenerNfil();i++)  {
	   for (int j=0;j<obtenerNcol();j++)
	         mr[i][j] = m.obtenerElem(i,j); } }
	public int cantElem (float ele)	{  
	    int cant = 0;
	     for (int i=0;i< obtenerNfil();i++)
	       for (int j=0;j< obtenerNcol();j++)
	         if (mr[i][j] == ele) cant++ ;
	    return cant;}
	public boolean esCuadrada () {
	   return (obtenerNfil() == obtenerNcol()) ; }
	public boolean esIdent () {
		 if (!esCuadrada())return false;
		  else return esIdentidad(obtenerNfil());}
		
	private boolean esIdentidad (int n) {
		 if (n == 1)return (mr[0][0] == 1);
		 else 
		   return (mr[n-1][n-1] == 1 &&
		  		esCeroFila(n-1) && 
		           esCeroColumna(n-1)&&
				esIdentidad(n-1));}
	private boolean esCeroColumna(int i) {
		// TODO Auto-generated method stub
		return false;
	}
	private boolean esCeroFila(int i) {
		// TODO Auto-generated method stub
		return false;
	}
		}
